﻿// using PathologicalGames;
// using System;
// using System.Collections.Generic;
// using UnityEngine;
// using WorldMapNew;
// using Yoozoo.Framework.Core;
// using Yoozoo.Managers;
// using Yoozoo.Managers.GameScene.Runtime.Record;
//
// namespace WorldMapBase.Tile
// {
//     /// <summary>
//     /// 管理实例化的对像池
//     /// </summary>
//     public class WorldGObjPool : SingletonMono<WorldGObjPool>
//     {
//         public const string POOL_NAME = "WorldGObj";
//
//         private SpawnPool m_spawnPool;
//
//         private static int count = 0;
//
//         private static int max = 0;
//
//         private static Dictionary<string, string> resNameMacth;
//         
//         /// <summary>
//         /// 初始化
//         /// </summary>
//         public static void Init()
//         {
//             if(p_instance == null)
//             {
//                 GetInstance("WorldGObjPool");
//             }
//
//             resNameMacth = new Dictionary<string, string>(10);
//             
//             p_instance.m_spawnPool = PoolManager.Pools.Create(POOL_NAME);
//             p_instance.m_spawnPool.dontDestroyOnLoad = true;
//             p_instance.m_spawnPool.name = POOL_NAME;
//             p_instance.m_spawnPool.group.name = POOL_NAME + "_Group";
//         }
//
//         /// <summary>
//         /// 预加载资源
//         /// </summary>
//         public static void CreatePool(Recorder recorder)
//         {
//             List<ResourceData> resourceList = WorldMapConfigData.GetResList();
//             max = resourceList.Count;
//             foreach (var v in resourceList)
//             {
//                 var tmp = recorder.GetData(v.resPath);
//                 if (tmp == null)
//                 {
//                     Debug.LogError("没有此资源：" + v.resPath);
//                     throw new NullReferenceException();
//                 }
//                 
//                 UnityEngine.Object asset =(UnityEngine.Object)tmp.GetValue();
//                 GameObject go = UnityEngine.Object.Instantiate(asset) as GameObject;
//                 go.name = System.IO.Path.GetFileNameWithoutExtension(v.resPath).ToLower();
//                 go.transform.position = new Vector3(-9999f, 0f, -9999f);
//                 p_instance.CreatePrefabPool(go.transform);
//                 SetChild(go.transform);
//             }
//         }
//
//         public static void DestoryPool()
//         {
//             p_instance.m_spawnPool.DespawnAll();
//             PoolManager.Pools.Destroy(POOL_NAME);
//             GameObject.Destroy(p_instance.gameObject);
//             p_instance = null;
//         }
//
//         private void CreatePrefabPool(Transform tf)
//         {
//             PrefabPool prefabPool = new PrefabPool(tf);
//             //默认初始化个数
//             prefabPool.preloadAmount = 10;
//             //是否开启自动清理模式
//             prefabPool.cullDespawned = false;
//             //自动清理，但保留几个对象不清理
//             prefabPool.cullAbove = 50;
//             //每过多久执行一遍自动清理，单位秒
//             prefabPool.cullDelay = 60;
//             //每次自动清理对象数
//             prefabPool.cullMaxPerPass = 5;
//             //是否限制Instance
//             prefabPool.limitInstances = false;
//             //限制缓存池里最大的Prefab的数量，!!!和上面的preloadAmount是有冲突的，如果同时开启则以limitAmout为准
//             prefabPool.limitAmount = 500;
//             //如果我们限制了缓存池里面只能有10个Prefab，如果不勾选它，那么你拿第11个的时候就会返回null。如果勾选它在取第11个的时候他会返回给你前10个里最不常用的那个
//             prefabPool.limitFIFO = false;
//
//             m_spawnPool.CreatePrefabPool(prefabPool);
//         }
//
//         /// <summary>
//         /// 获取对像
//         /// </summary>
//         /// <returns></returns>
//         public static WorldObject GetWorldObject(int mapLayer, int resID)
//         {
//             WorldObject obj = null;
//             if (mapLayer == WorldEntry.TREE_LAYER_ID) {
//                 obj = ClassManager.Get<TreeObject>();
//             }
//             else {
//                 obj = ClassManager.Get<WorldObject>();
//             }
//             
//             string resName = WorldMapConfigData.GetResNameByResId(resID);
//             if (!resNameMacth.TryGetValue(resName,out resName))
//             {
//                 resName = WorldMapConfigData.GetResNameByResId(resID).ToLower();
//                 resNameMacth[WorldMapConfigData.GetResNameByResId(resID)] = resName;
//             }
//             
//             Transform tf = PoolMgr.GetPrefab(POOL_NAME, resName);
//             obj.OnCreate(resID, tf);
//             
//             return obj;
//         }
//
//         public static void SetChild(Transform child)
//         {
//             child.parent = p_instance.transform;
//         }
//
//         /// <summary>
//         /// 回收对像
//         /// </summary>
//         public static void RecoverItem(WorldObject worldObject)
//         {
//             if (worldObject == null)
//             {
//                 return;
//             }
//
//             worldObject.OnRecovered();
//             
//             if (worldObject.GetRefTrans != null)
//             {
//                 PoolMgr.RemovePrefab(POOL_NAME, worldObject.GetRefTrans);
//             }
//             ClassManager.Free(worldObject);
//         }
//     }
// }